﻿using System.Collections.Generic;
using MIAP.Entidades;

namespace MIAP.DataAccess.Interfaces
{
    /// <summary>
    /// Contrato del DAO de procesos de ConfiguracionDao.
    /// </summary>
    public interface IConfiguracionDao
    {
        /// <summary>
        /// Obtiene la configuración para el perfil del administrador.
        /// </summary>
        /// <returns>Información del perfil del administrador.</returns>
        CatalogoInfo GetConfiguracionPerfilAdministrador();

        /// <summary>
        /// Obtiene la configuración del número de registros que se mostrarán por página en el grid.
        /// </summary>
        /// <returns>Un objeto catalogo info con la información contenida en la variable descripción</returns>
        CatalogoInfo GetNumeroPaginasGrid();

        /// <summary>
        /// Obtiene la ruta en donde se encotrarán los archivos.
        /// </summary>
        /// <returns>Un objeto catalogo info con la información contenida en la variable descripción</returns>
        CatalogoInfo GetRutaArchivos();

        /// <summary>
        /// Obtiene la ruta en donde se encotrarán los paquetes.
        /// </summary>
        /// <returns>Un objeto catalogo info con la información contenida en la variable descripción</returns>
        CatalogoInfo GetRutaPaquetes();

        /// <summary>
        /// Obtiene la configuración para el perfil del administrador.
        /// </summary>
        /// <returns>Un objeto catalogo info con la información contenida en la variable descripción</returns>
        CatalogoInfo GetIdentificadorVariabesUsuario();

        /// <summary>
        /// Obtiene el nombre de la variable del filename.
        /// </summary>
        /// <returns>Un objeto catalogo info con la información contenida en la variable descripción</returns>
        CatalogoInfo GetNombreVarFileName();

        /// <summary>
        /// Obtiene el nombre del dominio a utilizar para la función de impersonate.
        /// </summary>
        /// <returns>Un objeto catalogo info con la información contenida en la variable descripción</returns>
        CatalogoInfo GetNombreDominioImpersonate();

        /// <summary>
        /// Obtiene el nombre del usuario a utilizar para la función de impersonate.
        /// </summary>
        /// <returns>Un objeto catalogo info con la información contenida en la variable descripción</returns>
        CatalogoInfo GetNombreUserImpersonate();

        /// <summary>
        /// Obtiene el nombre del password del usuario a utilizar para la función de impersonate.
        /// </summary>
        /// <returns>Un objeto catalogo info con la información contenida en la variable descripción</returns>
        CatalogoInfo GetNombrePasswordImpersonate();

        /// <summary>
        /// Obtiene el nombre del password del usuario a utilizar para el envío de correo.
        /// </summary>
        /// <returns>Un objeto catalogo info con la información contenida en la variable descripción</returns>
        CatalogoInfo GetNombrePasswordcorreo();

        /// <summary>
        /// Obtiene el nombre del usuario a utilizar parael envío de correo.
        /// </summary>
        /// <returns>Un objeto catalogo info con la información contenida en la variable descripción</returns>
        CatalogoInfo GetNombreUserCorreo();

        /// <summary>
        /// Obtiene el nombre del dominio a utilizar para el envío de correo.
        /// </summary>
        /// <returns>Un objeto catalogo info con la información contenida en la variable descripción</returns>
        CatalogoInfo GetNombreDominioCorreo();

        /// <summary>
        /// Obtiene el correo (from) para utilizar en el envio de correo.
        /// </summary>
        /// <returns>Un objeto catalogo info con la información contenida en la variable descripción</returns>
        CatalogoInfo GetFromEnvioCorreo();

        /// <summary>
        /// Obtiene los correos a los cuales se le enviará notificacion si es que ocurre algún error en la aplicación.
        /// </summary>
        /// <returns>Un objeto catalogo info con la información contenida en la variable descripción</returns>
        CatalogoInfo GetFromCorreosErrores();

        /// <summary>
        /// Obtiene la cadena de conexión de la base de datos.
        /// </summary>
        /// <returns>Cadena de conexión.</returns>
        string GetConnectionString();

        /// <summary>
        /// Obtiene el nombre del server a utilizar para la ejecucion de paquetes desde base.
        /// </summary>
        /// <returns>un objeto catalogo info con la información contenida en la variable descripcion</returns>
        CatalogoInfo GetNombreServerPkg();

        /// <summary>
        /// Obtiene el password del usuario de windows a utilizar para la ejecucion de paquetes desde base.
        /// </summary>
        /// <returns>un objeto catalogo info con la información contenida en la variable descripcion</returns>
        CatalogoInfo GetNombreWindowsPasswordServerPkg();

        /// <summary>
        /// Obtiene el nombre del usuario de windows a utilizar para la ejecucion de paquetes desde base.
        /// </summary>
        /// <returns>un objeto catalogo info con la información contenida en la variable descripcion</returns>
        CatalogoInfo GetNombreWindowsUserServerPkg();

        /// <summary>
        /// Obtiene la lista de variables que se necesitan para la ejecucion del paquete
        /// </summary>
        /// <param name="nombrePaquete">nombre del paquete a buscar</param>
        /// <returns>lista con las variables que se necesitaran llenar para la ejecucion del paquete</returns>
        List<string> GetVariablesPaquete(string proyecto, string NomrbeArch);

        /// <summary>
        /// Obtiene la ruta de el ejecutable dtexec en el servidor (ya sea 32 0 64 bits)
        /// </summary>
        /// <returns>Un objeto catalogo info con la información contenida en la variable descripción</returns>
        CatalogoInfo GetRutaDtExcec();

        /// <summary>
        ///edita las variables de configuración que tendrá un paquete
        /// </summary>
        /// <returns></returns>
        void EditVariablesPaquete(string nombreAntProy, string nombreProy, string nombreAnteriorArchivo,
                                         string nombreArchivo, string user, IEnumerable<string> variables);

        /// <summary>
        ///Inserta las variables de configuración que tendrá un paquete
        /// </summary>
        /// <returns></returns>
        void SetVariablesPaquete(string nombreProy, string nombreArchivo, string user, List<string> variables);       
    }
}
